<?php

namespace app\admin\controller;

use app\common\controller\Backend;
use app\common\func\Lib;
use app\common\func\Tools;
use app\common\model\transaction\Jl;
use think\Db;

/**
 * 【星益付】 - 交易数据管理
 *
 * @icon fa fa-circle-o
 */
class Transaction extends Backend
{

    protected $searchFields = 'sn';

    /**
     * Transaction模型对象
     * @var \app\admin\model\Transaction
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\Transaction;

    }



    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */


    /**
     * 查看
     */
    public function index()
    {
        //当前是否为关联查询
        $this->relationSearch = true;
        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);

        if($this->auth->isSuperAdmin()){
            $productList = \app\common\model\Product::where(["status" => 1])->order("id desc")->select();
        }else{
            $productList = Lib::getUserProduct(1,$this->auth->getCompany()->id);
        }

        $list = [];
        foreach ($productList as $key => $val){
            $list[$val['id']] = $val['name'];
        }

        if ($this->request->isAjax()) {
            $product = $this->request->get("product", array_key_first($list));
            switch ($product){
                case 1:
                    $this->model = new \app\admin\model\Jl();
                    $productId = 1;
                    break;
                case 4:
                    $this->model = new \app\admin\model\Ys();
                    $productId = 4;
                    break;
                case 5:
                    $this->model = new \app\admin\model\Sft();
                    $productId = 5;
                    break;
            }

            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $query = $this->model->alias("transaction")
                    ->with(['equip'])
                    ->where($where)
                    ->where(["equip.product_id" => $productId]);

            if(!$this->auth->isSuperAdmin()){
                if($this->auth->getCompany()->pid == 0){
                    $query->where(["equip.top_id" => $this->auth->getCompany()->id]);
                }else{
                    $companyIds = Tools::getCompanyChild($this->auth->getCompany()->id,4);
                    $userIds = [];
                    $directUser = Tools::getCompanyChildUser($this->auth->getCompany()->id);//查询下级机构的直属代理
                    if(count($directUser) > 0){
                        foreach ($directUser as $key => $val){
                            $userIds[] = $val->id;
                            $childUser = Tools::getUserChild($val->id,4);//查询直属代理的所有下级代理
                            $userIds = array_merge($userIds,$childUser);
                        }
                    }

                    $query->where(["equip.main_type" => 1, "equip.main_id" => ["in", $companyIds]])->whereOr(function ($query) use ($userIds) {
                        $query->where(["equip.main_type" => 2, "equip.main_id" => ["in", $userIds]]);
                    });
                }
            }

            $list = $query->order("trading_time desc")
                    ->paginate($limit);

            foreach ($list as $row) {
                $row->visible(['id','merchant_name','order_num','sn','transaction_amount','transaction_rate','trading_time']);
                $row->visible(['equip']);
            }

            $table = $this->model->getTable();
            $alias = str_ireplace("fd_transaction_data_","",$table);
            $sum = Db::table($table)->alias($alias)
                ->join("equip equip",$alias.".sn = equip.sn","LEFT")
                ->where($where)
                ->where(["equip.product_id" => $productId])->sum("transaction_amount");

//            $sum = 0;
//            foreach ($list->items() as $key => $val){
//                $sum = bcadd($sum,$val->transaction_amount,2);
//            }

            $result = array("total" => $list->total(), "rows" => $list->items(), "sum" => $sum);

            return json($result);
        }

        $this->view->assign("product", (string)array_key_first($list));
        $this->view->assign("productList", $list);
        return $this->view->fetch();
    }

}
